package com.lsa.letcode.the88.mergeSortedArray;

import static org.junit.Assert.*;

import java.util.Arrays;

import org.junit.Test;

import com.lsa.helpers.Utils;

public class MergeSortedArrayTest {
	@Test
	public void test() throws Exception {
		Solution s = new Solution();
		test(s, Utils.createIntArray1D("2"), Utils.createIntArray1D("1 3"));
		test(s, Utils.createIntArray1D("1 3 5"), Utils.createIntArray1D("2 4 6"));
		test(s, Utils.createIntArray1D("1 3 5"), Utils.createIntArray1D("2"));
		test(s, Utils.createIntArray1D("1"), Utils.createIntArray1D("2 4 6"));
		test(s, Utils.createIntArray1D("1 3 5 7 8 9"), Utils.createIntArray1D("2 3 4 6 7 8 9"));
		test(s, Utils.createIntArray1D("1 3"), Utils.createIntArray1D("2 4 6"));
		test(s, Utils.createIntArray1D("2 4 6"), Utils.createIntArray1D("1 3"));
		test(s, Utils.createIntArray1D("1 1 1 1 1 1 2 2 2 88"), Utils.createIntArray1D("4 4 4 4 5 5 6 6 87"));
		test(s, Utils.createIntArray1D("2 4 6"), Utils.createIntArray1D(""));
	}

	private void test(Solution s, int[] nums1, int[] nums2) {
		int[] arr = new int[nums1.length + nums2.length];
		System.arraycopy(nums1, 0, arr, 0, nums1.length);
		s.merge(arr, nums1.length, nums2, nums2.length);
		int[] expected = new int[arr.length];
		System.arraycopy(nums1, 0, expected, 0, nums1.length);
		System.arraycopy(nums2, 0, expected, nums1.length, nums2.length);
		Arrays.sort(expected);
		assertArrayEquals(arr, expected);
	}
}	
